import axios from 'axios'
import { Modal, notification } from 'antd'
import persistence from './persistence'
import router from '@/router'

const http = axios.create({
  baseURL: 'http://geek.itheima.net/v1_0',
  timeout: 5000
})

// 添加请求拦截器
http.interceptors.request.use((config) => {
  const token = persistence.getToken()
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }

  return config
}, async (error) => {
  notification.open({
    type: 'error',
    message: '请求异常',
    description: error.message
  })

  return await Promise.reject(error)
})

// 添加响应拦截器
http.interceptors.response.use(
  (response) => {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    return response.data
  },
  async (error) => {
    // 登录超时、无权限等
    if (error.response.status === 401) {
      return Modal.confirm({
        title: '暂无权限',
        content: '🔒️ 登录已过期，请重新登录!',
        maskClosable: true, // 点击遮罩关闭对话框
        cancelButtonProps: { // 设置取消按钮的属性
          style: { display: 'none' } // 将取消按钮隐藏
        },
        async onOk () {
          // 清除token
          persistence.clearToken()
          router.navigate('/login')
        }
      })
    }

    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    notification.open({
      type: 'error',
      message: '响应异常',
      description: error.message
    })

    return await Promise.reject(error)
  })

export default http